// AbstractGLUTWindow.h

#ifndef ABSTRACTGLUTWINDOW_H__
#define ABSTRACTGLUTWINDOW_H__

#include <GL/glew.h>
#include <GL/glut.h>
#define GL3_PROTOTYPES

#include <string>

// Include the vector and matrix utilities from the textbook, as well as some
// macro definitions.
#include "Angel.h"

using namespace std;

#include "DebugHelper.h"

//#include "SimpleGLUTApplication.h"

namespace Voltron
{
	
	class AbstractGLUTWindow
	{
	
		private:
		
		// Private Constructors
		// Private Destructor
		// Private properties
		// Private members
		
		protected:
		
		// Protected Constructors
		// Protected Destructor
		// Protected properties
		// Protected members

		public:

		GLuint	_ID;

		//SimpleGLUTApplication*	_appinstance;
		
		string _title;
		int _windowXpos;
		int _windowYpos;
		int _windowHeight;
		int _windowWidth;
		
		
		// Public Constructors
		AbstractGLUTWindow();
		AbstractGLUTWindow(string title,  int windowXpos, int windowYpos, int windowHeight, int windowWidth);
		//AbstractGLUTWindow(SimpleGLUTApplication* appinstance, string title,  int windowXpos, int windowYpos, int windowHeight, int windowWidth);
		
		// Public Destructor
		~AbstractGLUTWindow();
	
		// Public properties

	   GLuint	getID(void);
	   void	setID(GLuint newWindowID);
		
	   //SimpleGLUTApplication*	getApp();
	   //void	setApp(SimpleGLUTApplication* appinstance);

		// Public members
		virtual void initWindow();

		// event handlers go here
		virtual void onReshape(int windowWidth, int windowHeight);
		virtual void onDisplay(void);
		virtual void onKeyboard(unsigned char key, int x, int y);
		virtual void onSpecial(int key, int x, int y);
		virtual void onMouse(int button, int state, int x, int y);
		virtual void onMotion(int x, int y);   

		
	};

}
#endif
